package cn.rocketmq;

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.junit.Test;

import java.nio.charset.StandardCharsets;

/**
 * 生产者 发送消息
 */
public class MyProducer {
    @Test
    public void sendMessage() throws Exception {
        //1.连接rocketmq才能发送消息,需要一个生产者对象
        DefaultMQProducer producer=new DefaultMQProducer();
        //提供rocketmq连接 localhost:9876(nameserver)
        producer.setNamesrvAddr("localhost:9876");
        //生产者 每一个对象在rocketmq都要管理成一个分组的成员 一般分组名字根据业务来
        //order-group cart-group test-group-01
        producer.setProducerGroup("producer-group-01");
        //连接启动
        producer.start();
        //线程沉睡5秒 如果资源吃的比较满
        //2.根据业务 组织消息数据 Message放一个字符串
        Message message=new Message();
        //消息载体 body
        //String msg="第一条消息";

            String msg="第["+1+"]条消息";
            byte[] bytes = msg.getBytes(StandardCharsets.UTF_8);
            message.setBody(bytes);
            //主题 消息队列名称 test-topic-01
            message.setTopic("test-topic-03");
            //keys
            message.setKeys("orderSn:2019/03/03");
            //tag
            message.setTags("北京");
            //3.发送消息 获取rocketmq的反馈(发成了,还是失败了)
            //TODO springboot整合 同步发送消息 异步发送消息
            SendResult sendResult=null;
            sendResult= producer.send(message);
            //result包括很多信息,比如发送的结果
            SendStatus sendStatus = sendResult.getSendStatus();
            //负载均衡计算结果,发送到了哪个broker 哪个队列 哪个主题
            MessageQueue messageQueue = sendResult.getMessageQueue();
            //消息自动生成的id
            String msgId = sendResult.getMsgId();
            System.out.println("发送结果:"+sendStatus);
            System.out.println("路由信息:"+messageQueue);
            System.out.println("消息id:"+msgId);


        //4.关闭连接
        producer.shutdown();
    }
}
